package com.ruoyi.security.service.backtest.gridtrading.strategy;

import java.math.BigDecimal;

/**
 * 涨跌类型计算策略
 * 使用策略模式处理不同的涨跌类型计算方式
 * 
 * @author yeoman
 * @date 2025/2/4
 */
public interface RiseFallTypeCalcStrategy {
    
    /**
     * 计算买卖倍数
     * 
     * @param diff 价格差值（绝对值）
     * @param benchmarkPrice 基准价
     * @param perRiseFallValue 每上涨/下跌涨跌幅（按价格差：分；按百分比：%）
     * @param tradeType 交易类型（BUY：买入；SELL：卖出）
     * @return 买入倍数
     */
    int calculateMultiple(BigDecimal diff, BigDecimal benchmarkPrice, BigDecimal perRiseFallValue, String tradeType);

    /**
     * 计算触发价
     *
     * @param benchmarkPrice 基准价
     * @param multiple 买卖倍数
     * @param perRiseFallValue 每上涨/下跌涨跌幅（按价格差：分；按百分比：%）
     * @param tradeType 交易类型（BUY：买入；SELL：卖出）
     * @return 触发价
     */
    BigDecimal calculateTriggerPrice(BigDecimal benchmarkPrice, int multiple, BigDecimal perRiseFallValue, String tradeType);

}

